/**********************************************************************
* Filename: Capacidade.java
* Created: 2013/05/29
* @author Fernando Brito e Abreu
**********************************************************************/
package org.quasar.airNova.businessLayer;

import java.util.Set;
import java.util.HashSet;
import org.quasar.airNova.persistenceLayer.Database;

public class Capacidade
{
	
	/***********************************************************
	* @return all instances of class Capacidade
	***********************************************************/
	public static Set<Capacidade> allInstances()
	{
		return Database.allInstances(Capacidade.class);
	}
	
	private int primeiro_numero;
	private int ultimo_numero;
	private Aviao aviao;
	private Classe classe;
	
	/**********************************************************************
	* Associative constructor
	* @param aviao the aviao to initialize
	* @param classe the classe to initialize
	**********************************************************************/
	public Capacidade(Aviao aviao, Classe classe)
	{
		this.aviao = aviao;
		this.classe = classe;
	}
	
	/**********************************************************************
	* Parameterized constructor
	* @param primeiro_numero the primeiro_numero to initialize
	* @param ultimo_numero the ultimo_numero to initialize
	* @param aviao the aviao to initialize
	* @param classe the classe to initialize
	**********************************************************************/
	public Capacidade(int primeiro_numero, int ultimo_numero, Aviao aviao, Classe classe)
	{
		this.primeiro_numero = primeiro_numero;
		this.ultimo_numero = ultimo_numero;
		this.aviao = aviao;
		this.classe = classe;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the primeiro_numero of the capacidade
	**********************************************************************/
	public int primeiro_numero()
	{
		return primeiro_numero;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param primeiro_numero the primeiro_numero to set
	**********************************************************************/
	public void setPrimeiro_numero(int primeiro_numero)
	{
		this.primeiro_numero = primeiro_numero;
	}
	
	/**********************************************************************
	* Standard attribute getter
	* @return the ultimo_numero of the capacidade
	**********************************************************************/
	public int ultimo_numero()
	{
		return ultimo_numero;
	}
	
	/**********************************************************************
	* Standard attribute setter
	* @param ultimo_numero the ultimo_numero to set
	**********************************************************************/
	public void setUltimo_numero(int ultimo_numero)
	{
		this.ultimo_numero = ultimo_numero;
	}
	
	/**********************************************************************
	* ASSOCIATIVE2MEMBER getter for Capacidade[*] <-> Aviao[1]
	* @return the aviao of the capacidade
	**********************************************************************/
	public Aviao aviao()
	{
		return aviao;
	}
	
	/**********************************************************************
	* ASSOCIATIVE2MEMBER setter for Capacidade[*] <-> Aviao[1]
	* @param aviao the aviao to set
	**********************************************************************/
	public void setAviao(Aviao aviao)
	{
		this.aviao = aviao;
	}
	
	/**********************************************************************
	* ASSOCIATIVE2MEMBER getter for Capacidade[*] <-> Classe[1]
	* @return the classe of the capacidade
	**********************************************************************/
	public Classe classe()
	{
		return classe;
	}
	
	/**********************************************************************
	* ASSOCIATIVE2MEMBER setter for Capacidade[*] <-> Classe[1]
	* @param classe the classe to set
	**********************************************************************/
	public void setClasse(Classe classe)
	{
		this.classe = classe;
	}
	
	/**********************************************************************
	* User-defined operation specified in SOIL/OCL
	**********************************************************************/
	public int Lotacao()
	{
		//	TODO
		//	return ((self.ultimo_numero - self.primeiro_numero) + 1)
		return -1;
	}
	
	/**********************************************************************
	* Object serializer
	**********************************************************************/
	public String toString()
	{
		return "Capacidade [primeiro_numero=" + primeiro_numero + ", ultimo_numero=" + ultimo_numero + ", aviao=" + aviao + ", classe=" + classe + "]";
	}
	
	//	-------------------------------------------------------------------------------
	//	INVARIANTS (TODO)
	/*
	inv capacidadeAtributoPrimeiroNumeroMenorQueUltimoNumero
		(self.ultimo_numero > self.primeiro_numero)
	
	inv capacidadeAtributoPrimeiroNumeroMaiorQueZero
		(self.primeiro_numero > 0)
	
	inv capacidadeAtributoUltimoNumeroMaiorQueZero
		(self.ultimo_numero > 0)
	
	*/
}
